package ar.uba.fi.celdas7568.ciudad;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Personalidad {
	/**
	 * Valores deseados por el agente para cada característica
	 */
	public Caracteristicas valoresCaracteristicas;

	/**
	 * Para cada característica: 
	 * 		0 si el valor debe ser igual
	 * 		1 si el valor debe ser menor
	 * 		2 si el valor debe ser mayor
	 */		  
	public Caracteristicas relacionCaracteristicas;

	/**
	 * Para cada característica:
	 * 		0 si es imprescindible
	 * 		1 si es deseable
	 * 		2 si es indeseable
	 * 		3 si es inadmisible
	 */
	public Caracteristicas clasificacionCaracteristicas;

	public Personalidad(String archivoXml) {
		valoresCaracteristicas = new Caracteristicas();
		relacionCaracteristicas = new Caracteristicas();
		clasificacionCaracteristicas = new Caracteristicas();
		
		try {

			File fXmlFile = new File(archivoXml);
			DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
			Document doc = dBuilder.parse(fXmlFile);
			doc.getDocumentElement().normalize();
			
			Element eElement;

			eElement = (Element) doc.getElementsByTagName("valorMedioTierra").item(0);
			valoresCaracteristicas.valorMedioTierra = Float.parseFloat(getTagValue("valor", eElement));
			relacionCaracteristicas.valorMedioTierra = Float.parseFloat(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.valorMedioTierra = Float.parseFloat(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("densidadPoblacional").item(0);
			valoresCaracteristicas.densidadPoblacional = Float.parseFloat(getTagValue("valor", eElement));
			relacionCaracteristicas.densidadPoblacional = Float.parseFloat(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.densidadPoblacional = Float.parseFloat(getTagValue("clasificacion", eElement));

			eElement = (Element) doc.getElementsByTagName("poderAdquisitivo").item(0);
			valoresCaracteristicas.poderAdquisitivo = Float.parseFloat(getTagValue("valor", eElement));
			relacionCaracteristicas.poderAdquisitivo = Float.parseFloat(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.poderAdquisitivo = Float.parseFloat(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("suciedad").item(0);
			valoresCaracteristicas.suciedad = Float.parseFloat(getTagValue("valor", eElement));
			relacionCaracteristicas.suciedad = Float.parseFloat(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.suciedad = Float.parseFloat(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("transito").item(0);
			valoresCaracteristicas.transito = Float.parseFloat(getTagValue("valor", eElement));
			relacionCaracteristicas.transito = Float.parseFloat(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.transito = Float.parseFloat(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("ruido").item(0);
			valoresCaracteristicas.ruido = Float.parseFloat(getTagValue("valor", eElement));
			relacionCaracteristicas.ruido = Float.parseFloat(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.ruido = Float.parseFloat(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("comisarias").item(0);
			valoresCaracteristicas.comisarias = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.comisarias = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.comisarias = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("carceles").item(0);
			valoresCaracteristicas.carceles = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.carceles = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.carceles = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("subtes").item(0);
			valoresCaracteristicas.subtes = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.subtes = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.subtes = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("colectivos").item(0);
			valoresCaracteristicas.colectivos = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.colectivos = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.colectivos = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("escuelas").item(0);
			valoresCaracteristicas.escuelas = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.escuelas = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.escuelas = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("universidades").item(0);
			valoresCaracteristicas.universidades = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.universidades = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.universidades = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("casinos").item(0);
			valoresCaracteristicas.casinos = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.casinos = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.casinos = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("teatros").item(0);
			valoresCaracteristicas.teatros = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.teatros = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.teatros = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("bibliotecas").item(0);
			valoresCaracteristicas.bibliotecas = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.bibliotecas = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.bibliotecas = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("cines").item(0);
			valoresCaracteristicas.cines = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.cines = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.cines = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("bares").item(0);
			valoresCaracteristicas.bares = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.bares = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.bares = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("parques").item(0);
			valoresCaracteristicas.parques = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.parques = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.parques = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("plazas").item(0);
			valoresCaracteristicas.plazas = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.plazas = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.plazas = Integer.parseInt(getTagValue("clasificacion", eElement));
			
			eElement = (Element) doc.getElementsByTagName("museos").item(0);
			valoresCaracteristicas.museos = Integer.parseInt(getTagValue("valor", eElement));
			relacionCaracteristicas.museos = Integer.parseInt(getTagValue("relacion", eElement));
			clasificacionCaracteristicas.museos = Integer.parseInt(getTagValue("clasificacion", eElement));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private String getTagValue(String string, Element eElement) {
		return eElement.getElementsByTagName(string).item(0).getChildNodes().item(0).getNodeValue();
	}
	
	private static String toStringInt(int valor, int relacion, int clasificacion, String caracteristica,boolean pasado) {
		String s = "Es ";
		if(pasado)
			s = "Era ";
		
		switch (clasificacion) {
		case 0:
			s += "imprescindible ";
			break;
		case 1:
			s += "deseable ";
			break;
		case 2:
			s += "indeseable ";
			break;
		case 3:
			s += "inadmisible ";
			break;

		default:
			break;
		}
		
		if (valor == 0) {
			s += "que no haya ";
		}else {
			s += "que haya ";
		}
		
		s += caracteristica;
		
		return s;
	}
	

	private static String toStringFloat(float valor, float relacion, float clasificacion,boolean pasado) {
		
		String s = "Es ";
		if(pasado)
			s = "Era ";
		
		if (clasificacion == 0) {
			s += "imprescindible ";
		}
		if (clasificacion == 1) {
			s += "deseable ";
		}
		if (clasificacion == 2) {
			s += "indeseable ";
		}
		if (clasificacion == 3) {
			s += "inadmisible ";
		}
		
		s += "que sea ";
		
		if (relacion == 0) {
			s += "igual ";
		}
		if (relacion == 1) {
			s += "menor ";
		}
		if (relacion == 2) {
			s += "mayor ";
		}
		
		s += "a " + String.valueOf(valor);
		
		return s;
	}
	
	@Override
	public String toString() {
		String separator = System.getProperty("line.separator");
		
		return 	"Valor medio de la tierra: " + separator + "\t" + 
					toStringFloat(valoresCaracteristicas.valorMedioTierra, 
							relacionCaracteristicas.valorMedioTierra, clasificacionCaracteristicas.valorMedioTierra,false) + separator +
					
				"Densidad poblacional: " + separator + "\t" + 
					toStringFloat(valoresCaracteristicas.densidadPoblacional,
							relacionCaracteristicas.densidadPoblacional, clasificacionCaracteristicas.densidadPoblacional,false) + separator +
							
				"Poder adquisitivo: " + separator + "\t" + 
					toStringFloat(valoresCaracteristicas.poderAdquisitivo,
						relacionCaracteristicas.poderAdquisitivo, clasificacionCaracteristicas.poderAdquisitivo,false) + separator +

				"Suciedad: " + separator + "\t" + 
					toStringFloat(valoresCaracteristicas.suciedad,
						relacionCaracteristicas.suciedad, clasificacionCaracteristicas.suciedad,false) + separator +
					
				"Tránsito: " + separator + "\t" + 
					toStringFloat(valoresCaracteristicas.transito,
						relacionCaracteristicas.transito, clasificacionCaracteristicas.transito,false) + separator +
					
				"Ruido: " + separator + "\t" + 
					toStringFloat(valoresCaracteristicas.ruido,
						relacionCaracteristicas.ruido, clasificacionCaracteristicas.ruido,false) + separator +
					
				"Comisarías: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.comisarias,
						relacionCaracteristicas.comisarias, clasificacionCaracteristicas.comisarias, "comisarías",false) + separator +

				"Cárceles: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.carceles,
						relacionCaracteristicas.carceles, clasificacionCaracteristicas.carceles, "cárceles",false) + separator +

				"Subtes: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.subtes,
						relacionCaracteristicas.subtes, clasificacionCaracteristicas.subtes, "subtes",false) + separator +

				"Colectivos: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.colectivos,
						relacionCaracteristicas.colectivos, clasificacionCaracteristicas.colectivos, "colectivos",false) + separator +

				"Escuelas: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.escuelas,
						relacionCaracteristicas.escuelas, clasificacionCaracteristicas.escuelas, "escuelas",false) + separator +
				
				"Universidades: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.universidades,
						relacionCaracteristicas.universidades, clasificacionCaracteristicas.universidades, "universidades",false) + separator +
				
				"Casinos: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.casinos,
						relacionCaracteristicas.casinos, clasificacionCaracteristicas.casinos, "casinos",false) + separator +
				
				"Teatros: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.teatros,
						relacionCaracteristicas.teatros, clasificacionCaracteristicas.teatros, "teatros",false) + separator +
				
				"Bibliotecas: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.bibliotecas,
						relacionCaracteristicas.bibliotecas, clasificacionCaracteristicas.bibliotecas, "bibliotecas",false) + separator +
				
				"Cines: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.cines,
						relacionCaracteristicas.cines, clasificacionCaracteristicas.cines, "cines",false) + separator +
				
				"Bares: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.bares,
						relacionCaracteristicas.bares, clasificacionCaracteristicas.bares, "bares",false) + separator +
				
				"Parques: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.parques,
						relacionCaracteristicas.parques, clasificacionCaracteristicas.parques, "parques",false) + separator +
				
				"Plazas: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.plazas,
						relacionCaracteristicas.plazas, clasificacionCaracteristicas.plazas, "plazas",false) + separator +

				"Museos: " + separator + "\t" + 
					toStringInt(valoresCaracteristicas.museos,
						relacionCaracteristicas.museos, clasificacionCaracteristicas.museos, "museos",false) + separator;
	
	}

	public static void reporteResultados(Zona zonaElegida,
			Personalidad personalidadInicial, Personalidad personalidad) {
		String separator = System.getProperty("line.separator");
		
		System.out.println("Valor medio de la tierra: " + separator + "\t" +
				 	zonaElegida.caracteristicas.valorMedioTierra + separator +"\t" +
					toStringFloat(personalidadInicial.valoresCaracteristicas.valorMedioTierra, 
							personalidadInicial.relacionCaracteristicas.valorMedioTierra, personalidadInicial.clasificacionCaracteristicas.valorMedioTierra,true) + separator +"\t" +
					toStringFloat(personalidad.valoresCaracteristicas.valorMedioTierra, 
							personalidad.relacionCaracteristicas.valorMedioTierra, personalidad.clasificacionCaracteristicas.valorMedioTierra,false) + separator +
				"Densidad poblacional: " + separator + "\t" +
					zonaElegida.caracteristicas.densidadPoblacional+ separator +"\t" +
					toStringFloat(personalidadInicial.valoresCaracteristicas.densidadPoblacional,
							personalidadInicial.relacionCaracteristicas.densidadPoblacional, personalidadInicial.clasificacionCaracteristicas.densidadPoblacional,true) + separator +"\t" +
					toStringFloat(personalidad.valoresCaracteristicas.densidadPoblacional,
							personalidad.relacionCaracteristicas.densidadPoblacional, personalidad.clasificacionCaracteristicas.densidadPoblacional,false) + separator +		
				"Poder adquisitivo: " + separator + "\t" +
					zonaElegida.caracteristicas.poderAdquisitivo+ separator +"\t" +
					toStringFloat(personalidadInicial.valoresCaracteristicas.poderAdquisitivo,
						personalidadInicial.relacionCaracteristicas.poderAdquisitivo, personalidadInicial.clasificacionCaracteristicas.poderAdquisitivo,true) + separator +"\t" +
					toStringFloat(personalidad.valoresCaracteristicas.poderAdquisitivo,
						personalidad.relacionCaracteristicas.poderAdquisitivo, personalidad.clasificacionCaracteristicas.poderAdquisitivo,false) + separator +	
				"Suciedad: " + separator + "\t" + 
					zonaElegida.caracteristicas.suciedad+ separator +"\t" +
					toStringFloat(personalidadInicial.valoresCaracteristicas.suciedad,
						personalidadInicial.relacionCaracteristicas.suciedad, personalidadInicial.clasificacionCaracteristicas.suciedad,true) + separator +"\t" +
					toStringFloat(personalidad.valoresCaracteristicas.suciedad,
						personalidad.relacionCaracteristicas.suciedad, personalidad.clasificacionCaracteristicas.suciedad,false) + separator +
				"Tránsito: " + separator + "\t" + 
					zonaElegida.caracteristicas.transito+ separator +"\t" +
					toStringFloat(personalidadInicial.valoresCaracteristicas.transito,
						personalidadInicial.relacionCaracteristicas.transito, personalidadInicial.clasificacionCaracteristicas.transito,true) + separator +"\t" +
					toStringFloat(personalidad.valoresCaracteristicas.transito,
						personalidad.relacionCaracteristicas.transito, personalidad.clasificacionCaracteristicas.transito,false) + separator +
				"Ruido: " + separator + "\t" + 
					zonaElegida.caracteristicas.ruido+ separator +"\t" +
					toStringFloat(personalidadInicial.valoresCaracteristicas.ruido,
						personalidadInicial.relacionCaracteristicas.ruido, personalidadInicial.clasificacionCaracteristicas.ruido,true) + separator +"\t" +
					toStringFloat(personalidad.valoresCaracteristicas.ruido,
						personalidad.relacionCaracteristicas.ruido, personalidad.clasificacionCaracteristicas.ruido,false) + separator +
				"Comisarías: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.comisarias) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.comisarias,
						personalidadInicial.relacionCaracteristicas.comisarias, personalidadInicial.clasificacionCaracteristicas.comisarias, "comisarías",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.comisarias,
						personalidad.relacionCaracteristicas.comisarias, personalidad.clasificacionCaracteristicas.comisarias, "comisarías",false) + separator +	
				"Cárceles: " + separator + "\t" +
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.carceles) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.carceles,
						personalidadInicial.relacionCaracteristicas.carceles, personalidadInicial.clasificacionCaracteristicas.carceles, "cárceles",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.carceles,
						personalidad.relacionCaracteristicas.carceles, personalidad.clasificacionCaracteristicas.carceles, "cárceles",false) + separator +	
				"Subtes: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.subtes) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.subtes,
						personalidadInicial.relacionCaracteristicas.subtes, personalidadInicial.clasificacionCaracteristicas.subtes, "subtes",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.subtes,
						personalidad.relacionCaracteristicas.subtes, personalidad.clasificacionCaracteristicas.subtes, "subtes",false) + separator +	
				"Colectivos: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.colectivos) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.colectivos,
						personalidadInicial.relacionCaracteristicas.colectivos, personalidadInicial.clasificacionCaracteristicas.colectivos, "colectivos",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.colectivos,
						personalidad.relacionCaracteristicas.colectivos, personalidad.clasificacionCaracteristicas.colectivos, "colectivos",false) + separator +	
				"Escuelas: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.escuelas) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.escuelas,
						personalidadInicial.relacionCaracteristicas.escuelas, personalidadInicial.clasificacionCaracteristicas.escuelas, "escuelas",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.escuelas,
						personalidad.relacionCaracteristicas.escuelas, personalidad.clasificacionCaracteristicas.escuelas, "escuelas",false) + separator +	
				"Universidades: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.universidades) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.universidades,
						personalidadInicial.relacionCaracteristicas.universidades, personalidadInicial.clasificacionCaracteristicas.universidades, "universidades",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.universidades,
						personalidad.relacionCaracteristicas.universidades, personalidad.clasificacionCaracteristicas.universidades, "universidades",false) + separator +	
				"Casinos: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.casinos) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.casinos,
						personalidadInicial.relacionCaracteristicas.casinos, personalidadInicial.clasificacionCaracteristicas.casinos, "casinos",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.casinos,
						personalidad.relacionCaracteristicas.casinos, personalidad.clasificacionCaracteristicas.casinos, "casinos",false) + separator +	
				"Teatros: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.teatros) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.teatros,
						personalidadInicial.relacionCaracteristicas.teatros, personalidadInicial.clasificacionCaracteristicas.teatros, "teatros",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.teatros,
						personalidad.relacionCaracteristicas.teatros, personalidad.clasificacionCaracteristicas.teatros, "teatros",false) + separator +	
				"Bibliotecas: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.bibliotecas) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.bibliotecas,
						personalidadInicial.relacionCaracteristicas.bibliotecas, personalidadInicial.clasificacionCaracteristicas.bibliotecas, "bibliotecas",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.bibliotecas,
						personalidad.relacionCaracteristicas.bibliotecas, personalidad.clasificacionCaracteristicas.bibliotecas, "bibliotecas",false) + separator +	
				"Cines: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.cines) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.cines,
						personalidadInicial.relacionCaracteristicas.cines, personalidadInicial.clasificacionCaracteristicas.cines, "cines",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.cines,
						personalidad.relacionCaracteristicas.cines, personalidad.clasificacionCaracteristicas.cines, "cines",false) + separator +	
				"Bares: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.bares) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.bares,
						personalidadInicial.relacionCaracteristicas.bares, personalidadInicial.clasificacionCaracteristicas.bares, "bares",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.bares,
						personalidad.relacionCaracteristicas.bares, personalidad.clasificacionCaracteristicas.bares, "bares",false) + separator +	
				"Parques: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.parques) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.parques,
						personalidadInicial.relacionCaracteristicas.parques, personalidadInicial.clasificacionCaracteristicas.parques, "parques",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.parques,
						personalidad.relacionCaracteristicas.parques, personalidad.clasificacionCaracteristicas.parques, "parques",false) + separator +	
				"Plazas: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.plazas) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.plazas,
						personalidadInicial.relacionCaracteristicas.plazas, personalidadInicial.clasificacionCaracteristicas.plazas, "plazas",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.plazas,
						personalidad.relacionCaracteristicas.plazas, personalidad.clasificacionCaracteristicas.plazas, "plazas",false) + separator +	

				"Museos: " + separator + "\t" + 
					Zona.toStringCaracteristica(zonaElegida.caracteristicas.museos) + separator +"\t" +
					toStringInt(personalidadInicial.valoresCaracteristicas.museos,
						personalidadInicial.relacionCaracteristicas.museos, personalidadInicial.clasificacionCaracteristicas.museos, "museos",true) + separator +"\t" +
					toStringInt(personalidad.valoresCaracteristicas.museos,
							personalidad.relacionCaracteristicas.museos, personalidad.clasificacionCaracteristicas.museos, "museos",false) + separator);
	}
}
